package com.xiaozhichao.javaapi.designpattern.adapter;

import com.xiaozhichao.javaapi.designpattern.adapter.classtype.Adapter;
import com.xiaozhichao.javaapi.designpattern.adapter.interfacetype.SourceSub1;
import com.xiaozhichao.javaapi.designpattern.adapter.interfacetype.SourceSub2;
import com.xiaozhichao.javaapi.designpattern.adapter.targettype.Wrapper;
import org.junit.Test;

/**
 *  适配器模式将某个类的接口转换成客户端期望的另一个接口表示，
 *  目的是消除由于接口不匹配所造成的类的兼容性问题。
 *  主要分为三类：类的适配器模式、对象的适配器模式、接口的适配器模式
 */
public class AdapterTest {

    /**
     * 类适配器
     */
    @Test
    public void testClassAdapter(){
        Targetable targer = new Adapter();
        targer.method1();
        targer.method2();
    }

    /**
     * 对象适配器
     */
    @Test
    public void testTargetAdapter(){
        Targetable targer = new Wrapper(new Source());
        targer.method1();
        targer.method2();
    }

    /**
     * 接口适配器
     */
    @Test
    public void testInterfaceAdapter(){
        Targetable targer1 = new SourceSub1();
        Targetable targer2 = new SourceSub2();
        targer1.method1();
        targer2.method2();
    }
}
